Dual table |
It is a table in Oracle that contains just one record and is available to all users. The DUAL table contains one column (named DUMMY) and one row (whose values is simply X). The DUAL table is provided to support on-the-fly queries. Es una tabla de los sistemas de bases de datos Oracle que contiene un único registro y que está disponible a todos los usuarios. La tabla dual contiene una columna (llamada DUMMY) y un renglón (cuyo valor es una simple X.) Esta tabla se diseñó para proporcionar apoyo a consultas en línea. |
Problem 1 |
Test the SQL command in Oracle (you may use any database). Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos). |
SQL |
SELECT SYSDATE FROM DUAL; |
Tip |
The DUAL table allows you to perform date operations when you have not created any tables. i.e. you can execute a SELECT statement from the DUAL table to display the current time. Most of the time you will have access to some tables, and you can call SYSDATE using these tables. All users in an Oracle database have access to the DUAL table. La tabla DUAL permite hacer operaciones de fechas y tiempo (un punto en el tiempo) aún cuando no se han creado las tablas de una base de datos. Por ejemplo es posible ejecutar un comando con SELECT de la tabla DUAL para obtener el tiempo del sistema. Todos los usuarios en una base de datos Oracle tienen acceso a la tabla DUAL. |
Problem 2 |
Test the SQL command in MySQL. Pruebe el comando de SQL en MySQL. |
SQL |
SELECT CURRENT_TIME(); |
Problem 3 |
Test the SQL command in MySQL. Pruebe el comando de SQL en MySQL. |
SQL |
SELECT CURRENT_DATE(); SELECT CURDATE(); |
Problem 4 |
Test the SQL command in Microsoft SQL Server. Microsoft SQL Server offers the function GETDATE() to return the current date (and time). Pruebe el comando de SQL en Microsoft SQL Server. Microsoft SQL Server ofrece la función GETDATE() para regresar la fecha (y el tiempo) actual. |
SQL |
SELECT GETDATE(); |
Problem 5 |
ford> Test the SQL command in Oracle. Pruebe el comando de SQL en Oracle. |
SQL |
SELECT SYSDATE, TO_CHAR(SYSDATE, 'MM-DD-YY') AS DATE_1, TO_CHAR(SYSDATE, 'MM-DD-YYYY') AS DATE_2, TO_CHAR(SYSDATE, 'DD-MM-YYYY') AS DATE_3, TO_CHAR(SYSDATE, 'DD-MON-YY') AS DATE_4 FROM DUAL; |
Problem 6 |
ford> Test the SQL command in MySQL. Observe the percent j represent the number of day in the year. ford> Pruebe el comando de SQL en MySQL. Observe que porcentaje j representa el número del día en el año. |
SQL |
SELECT name, contract_date, DATE_FORMAT(contract_date, '%W, %M %Y') AS date1, DATE_FORMAT(contract_date, '%D %y %a %d %m %b %j') AS date2 FROM employee; |
Problem 7 |
Test the SQL command in Oracle (you may use any database). Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos). |
SQL |
SELECT SYSDATE, ADD_MONTHS(SYSDATE, -1) AS PAST, ADD_MONTHS(SYSDATE, 2) AS FUTURE, MONTHS_BETWEEN(SYSDATE, ADD_MONTHS(SYSDATE, 3)) AS DIF FROM DUAL; |
Tip |
Be careful when manipulating dates. The time is stored in hours, minutes and seconds, the arithmetic operations may return unexpected values or fraction of days. Tenga cuidado cuando manipule columnas de fecha o de tiempo, ya que al hacer operaciones entre estas se pueden obtener valores inesperados. |
Tip |
Do not store a date using text variables such as VARCHAR or CHAR. Always manipulate dates using DATE variables. Nunca almacene una fecha usando variables de texto tales como VARCHAR o CHAR. Siempre manipule fechas usando variables del tipo DATE. |
Problem 8 |
Test the SQL command in Oracle (you may use any database). Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos). |
SQL |
SELECT SYSDATE, TO_CHAR(SYSDATE, 'MONTH') AS MONTH_, TO_CHAR(SYSDATE, 'MON') AS MON_, TO_CHAR(SYSDATE, 'MM') AS NUMBERS_, TO_CHAR(SYSDATE, 'RM') AS ROMAN_ FROM DUAL; |
Problem 9 |
Test the SQL command in Oracle (you may use any database). Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos). |
SQL |
SELECT SYSDATE, TO_CHAR(SYSDATE, 'DAY') AS DAY_, TO_CHAR(SYSDATE, 'DDTH') AS DDTH_, TO_CHAR(SYSDATE, 'DDSP') AS DDSP_, TO_CHAR(SYSDATE, 'DDSPTH') AS DDSPTH_ FROM DUAL; |
Problem 10 |
Test the SQL command in Oracle (you may use any database). Pruebe el comando de SQL en Oracle (usted puede usar cualquier base de datos). |
SQL |
SELECT SYSDATE, TO_CHAR(SYSDATE, 'HH:MI:SS AM') AS TIME_, TO_CHAR(SYSDATE, 'HH:MI') AS HH_MI, TO_CHAR(SYSDATE, 'HH12:MI') AS HH_12, TO_CHAR(SYSDATE, 'HH24:MI') AS HH_24 FROM DUAL; |
Tip |
In Oracle, it is possible to perform arithmetic operations with DATE values, the resulting value will be in days. MySQL provides the DATE_ADD and DATEDIFF functions to add and subtract dates, respectively. Microsoft SQL Server provides the DATEADD and DATEDIFF functions. En Oracle es posible realizar operaciones aritméticas con atributos del tipo DATE, el valor resultante será expresado en días. MySQL ofrece las funciones DATE_ADD y DATEDIFF para sumar y restar fechas, respectivamente. En Microsoft SQL Server se usa DATEADD y DATEDIFF. |
Tip |
Closings (i.e., close the month) are useful because they consolidate data to get information. They allow keeping the size of the database approximately constant (and of a reasonable size). Steps:
Los cortes (por ejemplo cerrar el mes) son útiles porque permiten consolidar los datos para obtener información. Permite mantener el tamaño de la base de datos aproximadamente constante (y dentro de un tamaño razonable). Pasos:
|
Tip |
The typical repeating periods are: daily, weekly, every two weeks, monthly, every three months, twice a year and yearly. To map these events to the database, you may consider:
Los periodos típicos de repetición son en general: diarios, por semana, quincenales, mensuales, trimestral, semestrales y anuales. Para mapear estos eventos a la base de datos se debe considerar lo siguiente:
|
Tip |
The LAST_DAY command of Oracle is motivated because of the regular procedures performed by human at the end of the month. El comando LAST_DAY de Oracle está motivado por el procedimiento natural de revisar y reportar las actividades en una empresa al final del mes. |
Problem 11 |
Test the SQL command in Oracle. As the beginning of the week is affected by the language of the database, the behavior of NEXT_DAY may different as the one shown. Pruebe el comando de SQL en Oracle. Como el principio de la semana es afectado por el lenguaje de la base de datos, el comportamiento de NEXT_DAY puede ser diferente al mostrado debajo. |
SQL |
SELECT SYSDATE, LAST_DAY(SYSDATE) AS LAST_D, NEXT_DAY(SYSDATE, 1) AS NEXT_SUN, NEXT_DAY(SYSDATE, 2) AS NEXT_MON, NEXT_DAY(SYSDATE, 3) AS NEXT_TUE FROM DUAL; |
Problem 12 |
Test the SQL command in Oracle. Pruebe el comando de SQL en Oracle. |
SQL |
SELECT SYSDATE, GREATEST(SYSDATE, TO_DATE('01-OCT-2004', 'DD-MM-YYYY'), TO_DATE('04-MAR-1999', 'DD-MM-YYYY')) AS GREATEST, LEAST(SYSDATE, TO_DATE('01-FEB-2000', 'DD-MM-YYYY'), TO_DATE('04-MAR-1999', 'DD-MM-YYYY')) AS EARLIEST FROM DUAL; |
TO_DATE() |
It is an Oracle command that allows you to change a string to a date value. i.e. TO_DATE('23-MAY-2005') will return a value of type date. In MySQL you may use the CAST command previously used to perform this type of conversion. Es un comando de Oracle que permite cambiar una cadena de texto a una variable del tipo de fecha. Por ejemplo, TO_DATE('23-MAY-2005') regresa una variable del tipo de fecha. En MySQL es posible cambiar a distintos tipos de datos usando el comando previamente visto CAST. |
SET DATEFORMAT() |
In Microsoft SQL Server, it is possible to set the date format at the moment to perform an INSERT (without affecting the database configuration) as shown below. En Microsoft SQL Server es posible especificar el formato de las fechas en el momento del ingreso de los datos (en forma temporal sin cambiar la configuración de la base de datos) como se muestra debajo. |
SQL |
SET DATEFORMAT dmy GO DECLARE @myVar DATETIME SET @myVar = '31/12/98' SELECT @myVar GO |
SQL |
SET DATEFORMAT ydm GO DECLARE @myVar DATETIME SET @myVar = '98/31/12' SELECT @myVar GO |
SQL |
SET DATEFORMAT ymd GO DECLARE @myVar DATETIME SET @myVar = '98/12/31' SELECT @myVar GO |
DATEPART() |
In Microsoft SQL Server, it is possible to extract a number representing part of a date variable, as shown in the example. En Microsoft SQL Server es posible extraer un número que represente parte de una variable de punto en el tiempo, como se muestra en el ejemplo. |
SQL |
SELECT DATEPART(month, GETDATE()) AS 'My Month' GO |
ISDATE() |
In Microsoft SQL Server, it is possible to check if some text represents a valid date as shown. En Microsoft SQL Server es posible verificar si un texto representa una fecha valida como se muestra. |
SQL |
DECLARE @someText VARCHAR(8) SET @someText = '12/21/98' SELECT ISDATE(@someText) |
DATENAME() |
In Microsoft SQL Server, it is possible extract the text that represents a part of a date value as shown below. En Microsoft SQL Server es posible extraer un texto que represente parte de una variable de punto en el tiempo como se muestra debajo. |
SQL |
SELECT DATENAME(month, GETDATE()) AS 'My Month' |
CONVERT and CAST |
In Microsoft SQL Server, it is possible to give format to a date or money value using CONVERT and CAST, as shown below. Note that CONVERT takes an integer to specify the desired format. En Microsoft SQL Server es posible dar formato a una fecha o un valor de dinero usando CONVERT y CAST, como se muestra debajo. Note que CONVERT toma un entero para especificar el formato deseado. |
SQL |
SELECT '$' + CAST(CONVERT(MONEY, balance, 1) AS VARCHAR) FROM account; SELECT '$' + CONVERT(VARCHAR(12), CAST(balance AS MONEY), 1) FROM account; SELECT CONVERT(VARCHAR, effective_date, 3) FROM history_price_list; |
Problem 13 |
ford> Write a query to display the employees who were hired after January 1, 1980. Use the date format shown. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar los empleados que fueron contratados después del primero de Enero de 1980 como se muestra. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Problem 14 |
ford> Write a query to display the age of the employees by the time they were hired. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar la edad de los trabajadores en el momento en el que fueron contratados. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Problem 15 |
ford> Write a query to display the age of each employee. The query shown displays the age of the employees at the time the query was executed. Your results may be different. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar la edad de los trabajadores en el momento en el que se ejecute la consulta. Sus resultados pueden ser diferentes de los mostrados. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Problem 16 |
ford> Write a query to display the retirement fund of each employee by the last day of 2007. The company gives seven dollars for each day the employees worked by the company. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Note that in Microsoft SQL Server you must convert to MONEY using CAST, and then convert to VARCHAR using CONVERT. Escriba un comando SQL para mostrar el fondo de retiro de cada empleado para el último día del 2007. La compañía da siete dólares por cada día que el empleado trabajó en la compañía. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Note que en Microsoft SQL Server usted debe convertir a MONEY usando CAST, y entonces convertir a VARCHAR usando CONVERT. |
Problem 17 |
ford> Write a query to display the name of the employees who will be retired by May 22 of 2014 (Retiring age is 50 years old.) Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar el nombre de los empleados que se jubilarán o se habrán jubilado para el 22 de Mayo del 2014. Suponga que la compañía retira a sus trabajadores cuando alcanzan una edad de 50 años. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Effective Date |
It provides an automatic method to take into account some data depending on the date that the query is executed. For instance, the prices of items in a store depend on the date. Thus, there must be for each item several records (price and effective date); however, only one record is used according to the date when the item is bought. Esta proporciona un método automático para tomar en cuenta algunos datos dependiendo de la fecha en que se ejecuta la consulta. Por ejemplo, los precios de los artículos en una tienda dependen de la fecha. Así, debe de haber para cada artículo varios registros (precio y fecha efectiva); sin embargo, solamente un registro es usado de acuerdo con la fecha cuando se compre el artículo. |
Problem 18 |
ford> Write an SQL query to display the position, the salary and the division (department) of Oscar Martinez. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar todos los puestos, salarios y departamentos (Divisions) de Oscar Martinez. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Problem 19 |
ford> Write a query to display the position, salary and division that Oscar has or will have on the maximum value of effective date (i.e., the last row of the previous query.) Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar el puesto, salario y division que Oscar ha tenido o tendrá en el último movimiento. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |
Problem 20 |
ford> Write a query to display the current position, salary and division that Oscar has. Your result may be different to the shown result. Add other transactions to the table to verify that your query works properly. Using: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. Escriba un comando SQL para mostrar el puesto, salario y division que Oscar tiene en el momento en que se ejecute la consulta. Su resultado puede ser diferente al mostrado. Agregue otros movimientos a Oscar para verificar que su consulta opera adecuadamente. Usando: (a) Microsoft SQL Server, (b) Oracle, (c) MySQL. |